package main

import (
	"fmt"
)

func main() {
	/*
		map 和 slice 结合使用
			1.创建 map 用于存储人的信息
				name, age, sex, address
			2.每个 map 存储一个人的信息
			3.将这些 map 存入到 slice
			4.打印遍历输出
	*/
	//1.创建 map 用于存储人的信息
	map1 := make(map[string]string)
	map1["name"] = "喜羊羊"
	map1["sex"] = "男性"
	map1["age"] = "18"
	map1["address"] = "青青草原羊村"
	fmt.Println(map1)

	//第二个人
	map2 := make(map[string]string)
	map2["name"] = "灰太狼"
	map2["sex"] = "男性"
	map2["age"] = "36"
	map2["address"] = "青青草原狼堡"
	fmt.Println(map2)

	//第三个人
	map3 := map[string]string{"name": "美羊羊", "sex": "女性", "age": "18", "address": "青青草原羊村"}
	fmt.Println(map3)

	//2.将 map 存储到 slice 中
	s1 := make([]map[string]string, 0, 3)
	s1 = append(s1, map1)
	s1 = append(s1, map2)
	s1 = append(s1, map3)

	//3.遍历切片
	for i, value := range s1 {
		fmt.Printf("第 %d 个动物的信息是：\n", i+1)
		fmt.Printf("\t姓名：%s\n", value["name"])
		fmt.Printf("\t年龄：%s\n", value["age"])
		fmt.Printf("\t性别：%s\n", value["sex"])
		fmt.Printf("\t地址：%s\n", value["address"])
	}

	fmt.Println("-------------元素为map类型的切片-----------------")

	var mapSlice = make([]map[string]string, 3)
	for index, value := range mapSlice {
		fmt.Printf("index:%d value:%v\n", index, value)
	}
	/*结果：
	index:0 value:map[]
	index:1 value:map[]
	index:2 value:map[]
	*/
	//对切片中的 map 元素进行初始化
	mapSlice[0] = make(map[string]string, 10)
	mapSlice[0]["name"] = "喜羊羊"
	mapSlice[0]["age"] = "18"
	mapSlice[0]["gender"] = "男"
	for index, value := range mapSlice {
		fmt.Printf("index:%d value:%v\n", index, value)
	}
	/*结果：
	index:0 value:map[age:18 gender:男 name:喜羊羊]
	index:1 value:map[]
	index:2 value:map[]
	*/

	fmt.Println("--------------值为切片类型的map---------------")
	var sliceMap = make(map[string][]string, 3)
	fmt.Println(sliceMap) //map[]

	key := "中国"
	value, ok := sliceMap[key]
	if !ok {
		value = make([]string, 0, 2)
	}
	value = append(value, "北京", "上海")
	sliceMap[key] = value
	fmt.Println(sliceMap) //map[中国:[北京 上海]]

}
